<?php

/**
 * @author luoshumai
 * 卓志供应商
 */

namespace App\Service\OrderService\OrderRouteService;

use App\Service\Code\Normal;
use App\Model\PssModel\OrderSupplier;
use Service\AppService\IdService;
use App\Service\VendorClient\ShopZhuoZhiEc\ShopZhuoZhiEcApiClient;
use App\Service\OrderService\BaseSupplierRouterService;


class Shopzhuozhiec extends BaseSupplierRouterService
{
    /**
     * 创建订单
     * @param array $param
     * @return mixed
     */
    public function createOrder($param = [])
    {
        //下单商品重组
        $supplierGoodsInfo = $param['supplierGoodsInfo'];
        $userGoodsList = $supplierGoodsInfo['userGoodsList'];
        $goodsList = $supplierGoodsInfo['goodsList'];
        $orderItems = [];

        //根据defaultStock分组
        $defaultStockGroupGoodsList = [];
        foreach ($goodsList as $item) {
            $index_key = $item['defaultStock'] . "_" . $item['declarePlanCode'].'_'.$item['deliveryMethod'];
            $defaultStockGroupGoodsList[$index_key][] = $item;
            unset($item);
        }
        //下游是否申报
        $isDelare = (
            (isset($param['order']['isOrderDeclare']) && $param['order']['isOrderDeclare'] == 1) ||
            (isset($param['order']['isPayDeclare']) && $param['order']['isPayDeclare'] == 1)
            ) ? true : false;
        //是否云仓商城
        $isShop = isset($param['order']['isSplitOrder']) && $param['order']['isSplitOrder'] == 1 ? true : false ;
        
        //按照上游仓库进行拆单
        foreach ($defaultStockGroupGoodsList as $item) 
        {
            $currentGoods       = current($goodsList);
            $supplierCommodityType = $currentGoods['supplierCommodityType'];
            
            //重新合并每一个仓库商品
            $orderGoods = [];
            foreach ($item as $goods) {
                $orderGoods = array_merge($orderGoods, $userGoodsList[$goods['skuCode']]);
                unset($goods);
            }

            //生成供应商主单号
            $supplierCode = $param['supplierGoodsInfo']['supplierCode'];
            $param['order']['supplier_psn'] = OrderSupplier::instance()->getCreateOrderSn($supplierCode);
            $param['order']['supplier_csn'] = IdService::instance()->getOtherID();
            
            //下游已申报，则使用下游的订单号作为中台子单号
            if( $isDelare && !$isShop && $supplierCommodityType != GOODS_TYPE_YBMY ){
                $param['order']['supplier_dsn'] = $param['order']['orderSn'];
            } else {
                $param['order']['supplier_dsn'] = IdService::instance()->getOtherID();
            }
            
            $param['order']['goods'] = $orderGoods;
            $res = OrderSupplier::instance()->getSupplierCreateOrderData($param);
            if ($res['code'] != Normal::SUC) {
                return $res;
            }
            $orderItems[] = $res['data'];
        }

        return Normal::returnCode(Normal::SUC, "获取成功", [
            'supplierCode' => $supplierCode,
            'orderItems' => $orderItems
        ]);
    }

    /**
     * 订单申报
     * @param array $param
     * @return mixed
     */
    public function orderPay($param = [])
    {
        return $this->callSdkApi(ShopZhuoZhiEcApiClient::class,$param['apiBody'])->createOrder($param);
    }

    /**
     * 订单取消
     * @param array $param
     * @return mixed
     */
    public function orderCancel($param = [])
    {
        return Normal::returnCode(Normal::SUC, "获取成功");
    }

    /**
     * 订单售后
     * @param array $param
     * @return mixed
     */
    public function orderAfterSale($param = [])
    {
        return Normal::returnCode(Normal::SUC, "获取成功");
    }

    /**
     * 获取物流信息
     * @param array $param
     */
    public function orderExpress($param = [])
    {
        return Normal::returnCode(Normal::SUC, "处理完成");
    }
}
